<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Flex</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }

    .box {
      margin: 0 auto;
      width: 600px;
      height: 600px;
      background-color: antiquewhite;
      display: flex;
      /* row: 子元素横向排列（默认） column：子元素纵向排列  row-reverse column-reverse 方向相反*/
      flex-direction: column;
      /* 一行或一列显示不下时换行属性，nowrap： 不换行， wrap: 换行, 反向换行（从后往前排，如果两行，首行在下，第二行在上）  */
      flex-wrap: nowrap;
      /* flex-direction 和 flex-wrap 的合体 */
      flex-flow: row wrap;
      /* 子项目在主轴上的对齐方式 
      flex-start: 从主轴开始方向对齐
      flex-end: 从主轴结束方向对齐
      center: 主轴方向居中对齐
      space-between: 如果无法铺满主轴，在元素之间留空隙（第一个的开始，最后一个的结束方向没有空隙）
      space-around: 如果无法铺满主轴，在元素周围留空隙 */
      justify-content: space-around;
      /* 多根轴线的对齐方式
      flex-start: 与交叉轴的起点对齐。
      flex-end: 与交叉轴的终点对齐。
      center: 与交叉轴的中点对齐。
      space-between: 与交叉轴两端对齐，轴线之间的间隔平均分布。
      space-around: 每根轴线两侧的间隔都相等。所以，轴线之间的间隔比轴线与边框的间隔大一倍。
      stretch（默认值）轴线占满整个交叉轴。 */
      align-content: flex-end;

      /* 单轴线元素，在交叉轴上的对齐方式, 例如主轴为row, 该属性为：行内元素，在行内副轴上的对齐方式
      flex-start：交叉轴的起点对齐。
      flex-end：交叉轴的终点对齐。
      center：交叉轴的中点对齐。
      baseline: 项目的第一行文字的基线对齐。
      stretch（默认值）：如果项目未设置高度或设为auto，将占满整个容器的高度。 */
      align-items: flex-start;
    }
     
     .box-item-order {
      order: 10;
      width: 100px;
      height: 60px;
      background-color: red;
      color: white;
      text-align: center;
      line-height: 60px;
      box-sizing: border-box;
      border: 1px solid green;
      flex: 0 0 200px;
     }

    .box-item {
      /* 项目的排列顺序。数值越小，排列越靠前，默认为0 */
      order: 1;
      /* 定义项目的放大比例, 默认为0，即如果存在剩余空间，也不放大。
      如果项目有剩余空间，将剩余空间氛围flex-grow
      如果所有项目的flex-grow属性都为1，则它们将等分剩余空间（如果有的话）。
      如果一个项目的flex-grow属性为2，其他项目都为1，则前者占据的剩余空间将比其他项多一倍。 */
      flex-grow: 1;
      /* flex-shrink 属性定义了项目的缩小比例，默认为1，即如果空间不足，该项目将缩小。
      如果所有项目的flex-shrink属性都为1，当空间不足时，都将等比例缩小。
      如果一个项目的flex-shrink属性为0，其他项目都为1，则空间不足时，前者不缩小。*/
      flex-shrink: 0;
      /* 属性定义了在分配多余空间之前，项目占据的主轴空间（main size）。
      浏览器根据这个属性，计算主轴是否有多余空间。它的默认值为auto，即项目的本来大小 */
      flex-basis: 300px;
      /* flex 是 flex-grow flex-shrink flex-basis 缩写形式
      默认 0 1 auto
      快捷值:
      auto 1 1 auto
      none 0 0 auto 
      */
      flex: auto;
      /* 属性允许单个项目有与其他项目不一样的交叉轴对齐方式，继承 align-item */
      align-self: flex-start;
      /* margin: 10px; */
      width: 100px;
      height: 60px;
      background-color: red;
      color: white;
      text-align: center;
      line-height: 60px;
      box-sizing: border-box;
      border: 1px solid green
    }

    .box-item1 {
      order: 2;
      width: 80px;
      height: 100px;
      background-color: red;
      text-align: center;
      line-height: 60px;
      box-sizing: border-box;
      border: 1px solid green
    }
  </style>
</head>

<body>
  <div class="box">
    <div class="box-item-order">1(order:10)</div>
    <div class="box-item1">2(order:2)</div>
    <div class="box-item">3(order:1)</div>
    <div class="box-item1">4(order:2)</div>
    <div class="box-item">5(order:1)</div>
    <!-- <div class="box-item">6</div>
    <div class="box-item">7</div>
    <div class="box-item">8</div> -->
  </div>
</body>

</html>